window.onload = function () {
  //闭包的真正意义是什么？
  //1、闭包是能够读取其它函数内部变量的函数
  //2、闭包可以简单理解成“定义在一个函数内部的函数“
  //3、闭包是将函数内部和函数外部连接起来的桥梁
  //要理解闭包，首先要理解javascript的全局变量和局部变量。
  // javascript语言的特别之处就在于: 函数内部可以直接读取全局变量，但是在函数外部无法读取函数内部
  // 的局部变量

  //不是标准的闭包
  var a = 10;
  function f1() {
    var a = 100;
    function f2() {
      console.log(a);
    }

    f2();
  }
  f1();

  //目的就是为了获取局部变量a
  function f1() {
    var a = 100;
    return a;
  }
  f1();

  //为什么需要闭包 要理解javascript的全局变量和局部变量。
  var a = 10; //全局变量 存在window对象
  function test() {
    a++;

    // var a = 100;
    console.log(a);
  }
  test(); // 11
  test(); // 12
  test(); // 13
  function f1() {
    var a = 10;
    a++;
    console.log(a);
  }
  f1(); // 11
  f1(); // 11
  f1(); // 11

  //闭包的写法

  function f1() {
    var a = 10; //局部变量
    function f2() {
      a++;
      console.log(a);
    }
    return f2;
  }
  var f = f1(); // f1() 执行的结果就是闭包  
  //返回的是一个函数 ， 并且这个函数对局部变量存在引用，形成了闭包的包含关系
  f(); // 11
  f(); // 12
 var x = f1();
 x(); // 11
 x(); // 12
 x(); // 13
 var y = f1();
 y(); // 11 
 f(); // 13
 x(); // 14
};

new Vue({
  el:'',
  data:{
    id:1
  }
})

//有这俩个区别是因为利用了闭包的特性，可以使每个组件中的data成为独立的存在，互不影响。
data(){
  return{

  }
}

const a = {
  name: "yzw"
}

const b = a;

b.name = "wa"

console.log(a);